diff options
Diffstat (limited to 'src/pages/study/[slug].tsx')
-rw-r--r-- | src/pages/study/[slug].tsx | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/pages/study/[slug].tsx b/src/pages/study/[slug].tsx new file mode 100644 index 0000000..a5af523 --- /dev/null +++ b/src/pages/study/[slug].tsx @@ -0,0 +1,82 @@ +import { getContextData } from "waku/middleware/context"; +import { getState } from "@/lib/db"; +import { startStudySession } from "@/actions/srs"; +import StudySession from "@/components/Flashcard/StudySession"; +import { Button } from "@/components/ui/button"; +import { Card } from "@/components/ui/card"; +import LessonSelector from "@/components/srs/LessonSelector"; +import type { PageProps } from "waku/router"; + +// This is a server component that gets the initial data +export default async function StudyPage(props: PageProps<"/study/[slug]">) { + const lessonId = props.slug; + const ctx = getContextData() as any; + const userId = ctx?.user?.id; + // const state = getState(null); + + // If not logged in, show login required message + if (!userId) { + return ( + <div className="container mx-auto py-8"> + <Card className="p-6 text-center"> + <h1 className="text-2xl font-bold mb-4">Login Required</h1> + <p className="mb-4"> + You need to be logged in to use the study session feature. + </p> + <Button asChild> + <a href="/login">Login</a> + </Button> + </Card> + </div> + ); + } + + // If no lesson ID provided, show lesson selector + + // Get initial data for the study session + + return ( + <div className="container mx-auto py-8"> + <Inner userId={userId} lessonId={lessonId} /> + </div> + ); +} + +async function Inner({ + userId, + lessonId, +}: { + userId: number; + lessonId: string; +}) { + return ( + <> + {lessonId && Number(lessonId) ? ( + <StudySessionOuter userId={userId} lessonId={Number(lessonId)} /> + ) : ( + <LessonSelector userId={userId} /> + )} + </> + ); +} +async function StudySessionOuter({ + userId, + lessonId, +}: { + userId: number; + lessonId: number; +}) { + const initialData = await startStudySession(userId, lessonId, true); + console.log({ initialData }); + if ("ok" in initialData) + return ( + <> + <StudySession + userId={userId} + lessonId={lessonId} + initialData={initialData.ok} + /> + </> + ); + else return <p>idk</p>; +} |